// Implementation of the ServerSocket class

#include "ServerSocket.h"
#include "SocketException.h"

using namespace std;

ServerSocket::ServerSocket(int port){

  if ( ! Socket::create() )
    {
      throw SocketException ( "Could not create server socket." );
    }

  if ( ! Socket::bind ( port ) )
    {
      throw SocketException ( "Could not bind to port." );
    }

  if ( ! Socket::listen() )
    {
      throw SocketException ( "Could not listen to socket." );
    }

}

ServerSocket::~ServerSocket(){}


const ServerSocket& ServerSocket::operator << (const string& s ) const{

	if(!Socket::send (s)){
	   	throw SocketException ( "Could not write a string to socket." );
    }

	return *this;

}

const ServerSocket& ServerSocket::operator << ( const int& n ) const{
	
	if (!Socket::send (n)){
		throw SocketException ( "Could not write an int to socket." );
    }

	return *this;
}


const ServerSocket& ServerSocket::operator >> (string& s ) const{

	if(!Socket::recv(s)){
    	throw SocketException ( "Could not read a string from socket." );
    }

	return *this;
}

const ServerSocket& ServerSocket::operator >> (int &n) const{

  if ( ! Socket::recv (n) )
    {
      throw SocketException ( "Could not read an int from socket." );
    }

  return *this;
}

void ServerSocket::accept ( ServerSocket& sock ){

	if (!Socket::accept(sock)){
		throw SocketException ( "Could not accept socket." );
    }
}
